package main

import (
	"log"
	"os"
	"3d-space/internal/api"
	"3d-space/internal/database"
	"3d-space/internal/middleware"

	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
	"github.com/joho/godotenv"
)

func main() {
	// 加载环境变量
	if err := godotenv.Load(); err != nil {
		log.Println("警告: 未找到 .env 文件，将使用系统环境变量")
	}

	// 验证必需的环境变量
	if os.Getenv("TENCENT_SECRET_ID") == "" || os.Getenv("TENCENT_SECRET_KEY") == "" {
		log.Println("警告: 未配置腾讯云密钥，AI 生成功能将不可用")
	}

	// 初始化数据库
	if err := database.Init("./data.db"); err != nil {
		log.Fatal("数据库初始化失败:", err)
	}
	defer database.Close()

	// 创建 Gin 路由
	r := gin.Default()

	// 静态文件服务
	r.StaticFile("/", "./static/index.html")
	r.Static("/static", "./static")

	// Session 中间件
	store := cookie.NewStore([]byte("your-secret-key-change-in-production"))
	r.Use(sessions.Sessions("session", store))

	// 公开路由
	public := r.Group("/api")
	{
		public.POST("/register", api.Register)
		public.POST("/login", api.Login)
		public.GET("/space/:username", api.GetPublicSpace)
		public.GET("/model/:id/file", api.GetModelFile)
	}

	// 需要认证的路由
	auth := r.Group("/api")
	auth.Use(middleware.AuthRequired())
	{
		auth.POST("/logout", api.Logout)
		auth.GET("/profile", api.GetProfile)
		auth.PUT("/space/toggle", api.ToggleSpace)
		
		// 模型管理
		auth.POST("/models/generate", api.GenerateModel)
		auth.POST("/models/upload", api.UploadModel)
		auth.GET("/models", api.ListMyModels)
		auth.PUT("/models/:id", api.UpdateModel)
		auth.DELETE("/models/:id", api.DeleteModel)
		
		// 留言
		auth.POST("/models/:id/comments", api.AddComment)
	}

	log.Println("服务启动在 :8081")
	r.Run(":8081")
}
